package com.cqupt.service;

import java.util.List;
import java.util.Map;

public interface BusinessService {

    /**
     * 通过hostid，key获得item信息
     * @param hostid 主机的id
     * @param key 键值
     * @return 返回单个 item 的信息
     */
    List<Map<String, Object>> getItemInfo(String hostid, String key);

    /**
     * 判断MySQL 状态 Up(1) or Down(0)
     * @param hostid 传入主机的id
     * @return 返回对应的数据库是否开启
     */
    Integer getMysqlStatus(String hostid);

    /**
     * 获取所有的 业务，不包括包含的设备
     * @return 返回所有的业务
     */
    List<Map<String, Object>> getAllBusiness();

    /**
     * 通过业务的 id 得到属于此业务的 设备、数据库
     * @param params 传入业务的id
     * @return 返回属于此业务的所有设备、数据库
     */
    List<Map<String, Object>> getBusinessInfoById(Map<String, Object> params);

    /**
     * 通过业务的 id 获取属于此业务的主机
     * @param params 传入业务的id
     * @return 返回属于此业务的所有主机
     */
    List<Map<String, Object>> getBusinessInfoDeviceById(Map<String, Object> params);

    /**
     * 通过业务的 id 获取属于此业务的数据库
     * @param params 传入业务的id
     * @return 返回属于此业务的所有数据库
     */
    List<Map<String, Object>> getBusinessInfoDatabaseById(Map<String, Object> params);

    /**
     * 获取所有的设备
     * @return 所有的设备（主机）
     */
    List<Map<String, Object>> getAllHosts();

    /**
     * 获取所有的数据库
     * @return 所有的数据库
     */
    List<Map<String, Object>> getAllDatabases();

    /**
     * 获得全部主机（用于数据库管理查询）
     * @param pageSize 分页大小
     * @param currentPage 当前页
     * @return 当前页的所有主机
     */
    List<Map<String, Object>> getAllDatabasesReal(String pageSize, String currentPage);


    /**
     * 获得全部主机数量
     * @return 全部主机数量
     */
    Integer getAllDatabasesCount();

    /**
     * 添加数据库
     * @param params 传入新增数据库的所有信息
     * @return 返回添加数据看是否成功
     */
    Integer addDatabases(Map<String, Object> params);

    /**
     * 修改数据库
     * @param params 需要被修改的数据库的id、及要改的新值
     * @return 返回是否修改成功
     */
    Integer modifyDatabases(Map<String, Object> params);

    /**
     * 删除数据库
     * @param databasesid 传入数据库的id
     * @return 返回是否删除成功
     */
    Integer delDatabases(String databasesid);

    /**
     * 获得一个数据库信息、用于修改
     * @param databasesid 传入数据库的id
     * @return 返回对应的数据库的所有信息
     */
    Map<String, Object> getADatabases(String databasesid);

    /**
     * 删除业务（通过id）
     * @param params 其中有需被删除的业务id
     * @return 返回是否删除成功
     */
    Integer deleteBusinessById(Map<String, Object> params);

    /**
     * 根据业务id返回业务的name
     * @param business_id 传入业务的id
     * @return 返回业务的名称name
     */
    String getBusinessNameById(Integer business_id);

    /**
     * 根据主机的id获取主机的名称
     * @param ids 主机的id列表
     * @return 返回ids对应的所有主机名称
     */
    List<String> getHostNameByIds(List<Integer> ids);

    /**
     * 根据数据库的id获取数据库的名称
     * @param ids 主机的id列表
     * @return 返回id对应的所有数据库名称
     */
    List<String> getDatabaseNameByIds(List<Integer> ids);

    /**
     * 取消业务和主机的关联（删除业务与主机的关联关系）
     * @param params params 中有业务的id、主机的id等
     * @return 返回是否删除成功
     */
    Integer cancelBusinessAndHostRelation(Map<String, Object> params);

    /**
     * 取消业务和数据库的关联（删除业务与数据库的关联关系）
     * @param params params 中有业务的id、数据库的id等
     * @return 返回是否删除成功
     */
    Integer cancelBusinessAndDatabasesRelation(Map<String, Object> params);

    /**
     * 添加业务，其中调用了添加业务和主机、数据的关机接口
     * @param params 在数据库中新增业务
     * @return 返回是否新增成功
     */
    Integer addBusiness(Map<String, Object> params);

    /**
     * 添加业务 和主机的关系（将主机与业务关联）
     * @param params 其中有业务的id、主机的id等参数
     * @return 是否操作成功
     */
    Integer addBusinessAndHostRelation(Map<String, Object> params);

    /**
     * 添加业务 和数据库的关系（将数据库与业务关联）
     * @param params 其中有业务的id、数据库的id等参数
     * @return 是否操作成功
     */
    Integer addBusinessAndDatabaseRelation(Map<String, Object> params);

    /**
     * 根据主机id获取业务
     * @param hostId 传入主机的id值
     * @return 返回与主机id关联的所有业务
     */
    List<Map<String, Object>> getBusinessByHostId(String hostId);

    /**
     * 根据数据库id获取业务
     * @param databaseId 传入数据库的 id逐渐
     * @return 返回与数据库id关联的所有业务
     */
    List<Map<String, Object>> getBusinessByDatabaseId(String databaseId);

    /**
     * 通过hostid获得主机ip
     * @param hostid 传入主机的 id
     * @return 返回主机对应的 ip 地址
     */
    String getIPbyHostid(String hostid);

    /**
     * 获得业务资源报表统计报表数据
     * @return 业务资源报表统计报表数据
     */
    List<Map<String,Object>> getBusinessReport();

    /**
     * 获得业务下数据库信息
     * @param business_fk 传入业务的外键
     * @return 返回也业务相关的主机信息
     */
    List<Map<String,Object>> getDatabasesBussinessInfo(String business_fk);

    /**
     * 获得业务下主机信息
     * @param business_fk 传入业务的外键
     * @return 返回与业务相关的主机信息
     */
    List<Map<String,Object>> getHostsBussinessInfo(String business_fk);



    /**
     * 通过主机id获得判断主机的可用性
     * @param hostid 传入主机ID
     * @return 返回对应主机的状态
     */
    Integer getStatusByHostid(String hostid);
}
